package ewms.common.core.domain;

import com.fasterxml.jackson.annotation.JsonInclude;
import ewms.common.core.domain.entity.SysDept;
import ewms.common.core.domain.entity.SysMenu;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.List;
import java.util.stream.Collectors;

/**
 * Treeselect树结构实体类
 *
 * @author ruoyi
 */

@Data
@NoArgsConstructor
@Accessors(chain = true)
public class TreeSelect implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 节点ID
	 */
	private Long id;

	/**
	 * 节点名称
	 */
	private String label;

	/**
	 * 是否禁用
	 */
	private Boolean isDisabled = false;

	/**
	 * 子节点
	 */
	@JsonInclude(JsonInclude.Include.NON_EMPTY)
	private List<TreeSelect> children;

	public TreeSelect(SysDept dept) {
		this.id = dept.getDeptId();
		this.label = dept.getDeptName();
		this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
	}

	public TreeSelect(SysMenu menu) {
		this.id = menu.getMenuId();
		this.label = menu.getMenuName();
		this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
	}

	public TreeSelect(Long id, String label, List<TreeSelect> children) {
		this(id, label, false, children);
	}

	public TreeSelect(Long id, String label, boolean disabled, List<TreeSelect> children) {
		this.id = id;
		this.label = label;
		this.isDisabled = disabled;
		this.children = children;
	}

}
